-
人脸动画:
-
三维人脸重建:从二维到三维
-
表情捕捉重建(传统:
-
多目相机直接拍
-
Marker标记(常见
-
深度传感器(Kinnet
-
RGB视频流
-
用模型来重建
-
3DMM:说白了就是给定一个高质量的三维的人脸数据库,然后训练出一个2D->3D的模型,之后输入一个2D人脸,就通过模型输出3D。其中有S和T两种向量
-
multi-linear models:多一个参数,将人脸数据SVD,分为三个参数
-
非线性:引入深度学习
-
图像变形:
-
直接变形:无非就是从S到D做一个插值就完事,很直接
-
基于特征的图像变形:先找到特征点,对特征进行插值
-
BN算法:说白了就是训练一个数据库,包含对应的关键向量,然后插值这些向量。且向量上的点在转换后,到两端点的比例还是保持不变,这是他的关键
-
形状混合:
-
顶点插值法:主要问题在于不自然,且极端情况下会带来错误结果
-
几何内在参数法:先算边和角,再计算定点位置
-
弹簧模型:
-
阴影
- 阴影是构建立体感的重要因素,且分为本影和半影;可以帮助认识接受者和遮挡物的几何形状
- 阴影可以分为附着阴影(背朝太阳)、投射阴影(脸朝太阳)、自阴影(自己产生);
- 硬阴影VS软阴影:所谓硬就是点光源产生的阴影结果,每个点只有在或者不在阴影中两个值;软则是由面光源产生
- 平面阴影:计算较简单,可以直接套矩阵计算
- 曲面阴影:可以通过阴影纹理:阴影纹理是一种生成曲面阴影的方法,通过从光源的视点绘制场景,并将深度值存储在一个纹理中。然后,这个纹理被用作投影纹理来判断一个点是否在阴影中。
-
阴影的绘制算法:
-
阴影域(准确,但是慢):非常简单但是又很聪明的方法:人眼不是接受光线,而是发出光线;然后计算从视点到一个像素点的射线经历了几次阴影域,进入+1,退出-1,最后判断是否大于0即可。PPT上的讲解不够仔细,可以通过这个链接进一步了解:
-
阴影图算法(不准确,但是很快):简单来讲是指先存好一张Map,里面包含了光源到物体表面的深度信息,然后判断某个点是否在阴影中,就对比该点到光源的距离是否大于 深度图中存的值。
-
纹理映射:
- 纹理的概念:用来表示物体表面细节的图像,增强真实感
- 纹理使用三步:采集+贴图+滤波
- 柏林噪音:使用不同频率和振幅的相干噪音函数来创建自然的图案,可以用来生成大理石、木头、云等纹理。
- 纹理合成:基于点/块的拓展
- 纹理滤波:主要还是精度不够,带来的摩尔纹、锯齿问题等等,需要滤波去除。主要方式包括:点采样,双线性插值、双三次插值、MipMap(预先处理好大小不同的纹理素材,用的时候选合适大小就行)、各向异性过滤(现在游戏很常见了)
- 光追的概念:由于计算机只能模拟光线,而不能百分百还原现实世界的光线路径,于是有光线追踪技术来模拟
- 光线投射算法:①从视点发射光线,找到交点;②计算离视点最近的交点;③根据光照模型赋值亮度。缺点 :不包含阴影、反射、折射的效果,光线只走一次
-
光线跟踪算法(脱胎于光线投射):
- 首先,计算光线与场景中物体最近的交点
- 在物体交点处计算反射、折射所产生的新的光线的方向
- 对新的光线继续追踪(递归过程)
- 光线与各种形状物体相交计算
- 使用的Trick:计算半透明物体阴影时,直接将光的颜色乘上遮挡物的透明因子,而忽略光的折射
-
网格的光滑:目的是为了去除噪点
-
拉普拉斯曲线光滑:每个点向左右邻居的均值靠拢。简单理解就是收缩,不断地互相靠拢,达到平滑的效果。至于PPT中的这句话:二阶导数的有限差分离散化 =一维拉普拉斯算子, 可以做如下解释:
-
拉普拉斯算子定义:若在传统欧式空间,则是一阶导数的散度,即对F在每个坐标轴上的二阶偏导的求和;若在曲面上,则是对曲面M的梯度的散度,是对F在M上沿着任意方向的二阶方向导数求平均
-
有限差分离散化:即对离散的点,用他们的值来近似代替二阶导数,拉普拉斯算子也坍缩到一维,变成取两边的点的值的均值。
-
网格的简化:目的是简化掉多余的网格,提高性能。主要有以下四种方式:
- 采样:很low的方法,不用
- 自适应细分:即找规律,找到一个可以递归细分的基底网格来近似
- 去除:常用,迭代地去除网格上的顶点或面片,并通过三角化填补孔洞
- 顶点合并:将多个顶点合并成一个顶点,用的边坍缩算法,将共边的顶点合并起来
-
网格的细分:与简化相反。通常有两种算法
- Loop细分:第一个细分方法,较简单,每个边加一个顶点,一个三角形就变成4个小三角了,进行n步,一个三角面就变成了4n个三角面。至于顶点升级、选取的公式,了解即可
- 根三细分:不同于Loop在边上创建新的顶点,他在三角形中间创建顶点即重心位置,一个三角变三个三角。注意步骤:①找重心;②收缩顶点;③公共边去掉,改为连接两个重心点
-
网格模型的简化:基本有三种算法
- 顶点删除,简单直接
- 边压缩,删一条边,用到这条边的三角全部消失
- 面片收缩:一个三角消失,带走相邻的三个三角